package Tests;
import Informations.*;
import Destinations.*;
import Transmetteurs.*;
import Sources.*;
import Sondes.*;
import Recepteurs.*;

import java.util.Scanner;

import Informations.Information;
import Informations.InformationNonConforme;


public class Test1 {

	/**
	 * @param args
	 * @throws InformationNonConforme 
	 */
	public static void main(String[] args) throws InformationNonConforme {
		//Scanner scan=new Scanner(System.in);
		//System.out.println("Pour transmettre des floats,Veuillez rentrez la longueur de la taille  gnrer");
		//int taille=scan.nextInt();
		SourceFixe source = new SourceFixe ();
		SourceAleatoire sourceAleatoire = new SourceAleatoire(200);
		
		TransmetteurParfait<Boolean>  tp= new TransmetteurParfait<Boolean> ();
		TransmetteurParfait<Float>  tpAleatoire= new TransmetteurParfait<Float> ();
		
		DestinationFinale<Boolean> dest = new DestinationFinale<Boolean>();
		DestinationFinale<Float> destAleatoire = new DestinationFinale<Float>();
		
		SondeLogique sondeLSortie= new SondeLogique("Logique: Resultat en sortie ");
		SondeLogique sondeLEntree= new SondeLogique("Logique: Resultat sonde en entree ");
		
		SondeAnalogique sondeASortie= new SondeAnalogique("Analogique: Resultat en sortie ");
		SondeAnalogique sondeAEntree= new SondeAnalogique("Analogique: Resultat sonde en entree ");
		
				
		source.connecter(tp);
		tp.connecter(dest);
		source.connecter(sondeLEntree);
		tp.connecter(sondeLSortie);
		
		source.emettre();
		
		sourceAleatoire.connecter(tpAleatoire);
		tpAleatoire.connecter(destAleatoire);
		sourceAleatoire.connecter(sondeAEntree);
		tpAleatoire.connecter(sondeASortie);
		sourceAleatoire.emettre();
	
		
	
	
		System.out.println("\n########################################################");
		System.out.println("\nLe Teb pour la transmission en binaire est: "+calculDuTeb(tp,source)+"\n");
		System.out.println("########################################################");
		System.out.println("\nLe Teb pour la transmission en analogique est: "+calculDuTeb(tpAleatoire,sourceAleatoire)+"\n");
		System.out.println("########################################################");
		
	}
	
	/**
	 * Methode pour le calcul du TEB
	 */
public static float calculDuTeb(DestinationInterface d,SourceInterface s){
	// on rcupre les informations recues et mises
	Information recue=d.getInformationRecue();
	Information emise=s.getInformationEmise();
	int difference=0;// pour comparer s'il y'aura de difference entre d et s
	if (recue.nbElements()==emise.nbElements()){
		
		for(int j=0;j<recue.nbElements();j++){
			if (!recue.iemeElement(j).equals(emise.iemeElement(j)))
				difference++;
			
		}
		return (float) (difference/recue.nbElements());
			
		
		
		
	}
	// sinon le taux est  max cad 1
	else
		return 1;
	
}

}
